import turtle
import math


turtle.pensize(5)
turtle.colormode(255)
 
# 画背景
turtle.pencolor("#ed120c")
turtle.fillcolor("#ed120c")
turtle.begin_fill()
turtle.penup()
turtle.goto(-150, 100)
turtle.pendown()
for i in [300, 200, 300, 200]:
    turtle.forward(i)
    turtle.right(90)
turtle.left(90)
turtle.end_fill()
turtle.penup()
 
# 画五角星函数，要求传入五角星中心坐标，五角星外接圆半径，五角星逆时针旋转角度（默认角度0度为向上，即大五角星方向）
def Pentagram(x, y, radius, degree):
    """
    用顶点（外/内交替）的多边形方式填充五角星，避免自交导致的中间空洞。
    degree 参数为相对于“向上”方向的逆时针旋转角度（与原函数语义一致）。
    """
    # 计算内接半径（五角星内点半径），公式：sin18 / sin54 ≈ 0.381966
    inner_ratio = math.sin(math.radians(18)) / math.sin(math.radians(54))
    inner_r = radius * inner_ratio

    # 从“向上”为基准，加上 degree 偏移，依次生成 10 个顶点（外点、内点交替）
    start_ang = math.radians(-90 + degree)  # -90 度使第一个外点朝上
    verts = []
    for i in range(10):
        ang = start_ang + math.radians(i * 36)  # 360/10 = 36°
        r = radius if (i % 2 == 0) else inner_r
        vx = x + r * math.cos(ang)
        vy = y + r * math.sin(ang)
        verts.append((vx, vy))

    # 绘制并填充多边形（按顺序连接顶点，避免交叉线造成的 hole）
    turtle.penup()
    turtle.goto(verts[0])
    turtle.pencolor("#f4ec20")
    turtle.fillcolor("#f4ec20")
    turtle.begin_fill()
    turtle.pendown()
    for vx, vy in verts[1:]:
        turtle.goto(vx, vy)
    turtle.goto(verts[0])
    turtle.end_fill()
    turtle.penup()

 
def main():
    # 画大五角星
    Pentagram(-100, 50, 30, 0)
 
    # 画第一个小五角星
    degree1 = 90 + math.atan(3 / 5) * 180 / math.pi  # 计算第一个小五角星相对于大五角星的逆时针旋转角度，atan计算弧度需要转化为角度
    Pentagram(-50, 80, 10, degree1)
 
    # 画第二个小五角星
    degree2 = 90 + math.atan(1 / 7) * 180 / math.pi
    Pentagram(-30, 60, 10, degree2)
    
    # 画第三个小五角星
    degree3 = 90 - math.atan(2 / 7) * 180 / math.pi
    Pentagram(-30, 30, 10, degree3)
    
    # 画第四个小五角星
    degree4 = 90 - math.atan(4 / 5) * 180 / math.pi
    Pentagram(-50, 10, 10, degree4)
    
    turtle.hideturtle()
    turtle.done()



if __name__ == "__main__":
    main()